package com.example.demo.mapper;

import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface UserInfoMapper {

    //以下的 @Param 建议加上，不然某些场景读取不到参数
    public UserInfo getUserById(@Param("id") Integer ID);//表示 参数ID是@Param读取的 id，即xml文件中${id}中的 id

    //此时不改变其他代码，直接在单元测试中判断业务是否能够实现
    public int updateUserById(@Param("id") Integer ID,@Param("username") String Name);

    //此时不改变其他代码，直接在单元测试中判断业务是否能够实现
    public int delUserById(@Param("id") Integer ID);

    //此时不改变其他代码，直接在单元测试中判断业务是否能够实现
    //添加用户，返回受影响的行数
    public int addUser(UserInfo userInfo);

    //添加用户，返回受影响的行数和自增的id
    public int addUser1(UserInfo userInfo);

    //${} 参数直接替换 场景演示:根据创建时间进行倒序或正序
    public List<UserInfo> getOrderList(@Param("order") String order);

    //${}安全漏洞： SQL注入案例：
    public UserInfo login(@Param("username") String username,@Param("password") String password);

    //特殊的 like chaxun
    public List<UserInfo> getUserByName(@Param("username") String username);

    //一对多场景：一个作者对应多篇文章  根据用户id获取用户信息和发表的所有文章
    public UserInfo getUserAndArticleByUid(@Param("uid") Integer uid);
    
}
